﻿
#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <iostream>
#include <string>
#include <filesystem>


#define ERR_NONE 0
#define ERR_NO_CMD 1
#define ERR_NO_PARAM 2

// ----------------------------------------------------
// 增加对应函数的响应
#include "src/gpu_info/gpu_info.h"
#include "src/gemv_blck/gemv_blck.h"
int main(int argc, char* argv[]) {
	// -----------------------------------------------
	// 应用参数加载
	std::cout << "=============================================== " << std::endl; //
	std::cout << "参数个数:" << argc << std::endl; //
	std::cout << "应用名:" << argv[0] << std::endl; //

	// ------------------------------------------------
	// 直接允许只有一个参数时,进行函数测试即可，将所有需要测试的函数都运行一次
	if (argc == 1)
	{
		std::cout << "=============================================== " << std::endl; //
		std::cout << "RUN gpu_info" << std::endl; //
		gpu_info(getProjectPath()); //模拟运行
		std::cout << "=============================================== " << std::endl; //
		std::cout << "RUN gemv_blck" << std::endl; //c
		gemv_blck(); //模拟运行

	}

	// ------------------------------------------------
	// 第二个参数
	std::string s_cmd;
	if (argc > 1) //存在第二个参数，
	{
		s_cmd = argv[1];
		std::cout << "指令:" << argv[1] << std::endl; //
	}
	else
	{
		s_cmd = "no_cmd";
	}

	// --------------------------------------------------
	// 按照指令加载对应的函数
	// 增加指令缺失的判断
	if (s_cmd == "no_cmd")
	{
		return ERR_NO_CMD; // 返回无指令号
	}
	//增加GPU信息输出
	if (s_cmd == "gpu_info")
	{
		if (argc == 3)
		{
			std::cout << "路径:" << argv[2] << std::endl; //
			gpu_info(argv[2]);
			return ERR_NONE;
		}
		else
		{
			return ERR_NO_PARAM;
		}

	}

}